home *** CD-ROM | disk | FTP | other *** search
- unit Reader1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- DB, MyDS, StdCtrls, TypInfo, MyTable, ComCtrls, ExtCtrls, DBCtrls, Grids,
- DBGrids, DBTables, DBClient;
-
- type
- PTestRec = ^TTestRec;
- TTestRec = packed record
- DelFlag: Byte;
- EmpNo: SmallInt;
- FirstName: string[15];
- LastName: string[20];
- HireDate: TDateTime;
- DeptNo: string[3];
- Salary: Double;
- NullFlags: LongInt;
- end;
-
- TForm1 = class(TForm)
- btnTest: TButton;
- btnClose: TButton;
- MyTable1: TMyTable;
- PageControl1: TPageControl;
- TabSheet1: TTabSheet;
- TabSheet2: TTabSheet;
- Memo1: TMemo;
- btnTest2: TButton;
- DataSource1: TDataSource;
- DBGrid1: TDBGrid;
- DBNavigator1: TDBNavigator;
- Table1: TTable;
- MyTable1EmpNo: TSmallintField;
- MyTable1FirstName: TStringField;
- MyTable1LastName: TStringField;
- MyTable1HireDate: TDateTimeField;
- MyTable1DeptNo: TStringField;
- MyTable1Salary: TFloatField;
- MyTable1CalcField: TIntegerField;
- Database1: TDatabase;
- procedure btnTest1Click(Sender: TObject);
- procedure btnCloseClick(Sender: TObject);
- procedure btnTest2Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure MyTable1CalcFields(DataSet: TDataSet);
- private
- public
- procedure DumpCurrentRec1;
- procedure DumpCurrentRec2;
- end;
-
- var
- YesNo: array[Boolean] of Char = ('N', 'Y');
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- procedure TForm1.DumpCurrentRec1;
- var
- RecBuffer: TTestRec;
- begin
- if MyTable1.GetCurrentRecord(@RecBuffer) then
- with RecBuffer do
- Memo1.Lines.Add(Format('%3d %3d %-15s %-20s %10s %3s %11.0m',
- [MyTable1.RecNo, EmpNo, FirstName,
- LastName, DateToStr(HireDate),
- DeptNo, Salary])
- );
- end;
-
- procedure TForm1.DumpCurrentRec2;
- begin
- with MyTable1 do begin
- Memo1.Lines.Add(Format('%3d %3d %-15s %-20s %10s %3s %11.0m %3d',
- [RecNo,
- FieldByName('EmpNo').AsInteger,
- FieldByName('FirstName').AsString,
- FieldByName('LastName').AsString,
- DateToStr(FieldByName('HireDate').AsDateTime),
- FieldByName('DeptNo').AsString,
- FieldByName('Salary').AsFloat,
- FieldByName('CalcField').AsInteger])
- );
- end;
- end;
-
- procedure TForm1.btnTest1Click(Sender: TObject);
- var
- BookmarkA,
- BookmarkB: TBookmark;
- I: Integer;
- SaveDept: ShortString;
- begin
- PageControl1.ActivePage := TabSheet1;
- with MyTable1 do begin
- (*
- Open;
- try
- Memo1.Lines.Add('Active = ' + IntToStr(Ord(Active)));
- Memo1.Lines.Add('RecordCount = ' + IntToStr(RecordCount));
- Memo1.Lines.Add('RecordSize = ' + IntToStr(RecordSize));
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Read to EOF forwards ***');
- First;
- while not Eof do begin
- DumpCurrentRec1;
- Next;
- end;
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Read to BOF backwards ***');
- Last;
- while not Bof do begin
- DumpCurrentRec1;
- Prior;
- end;
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Test MoveBy ***');
- First;
- MoveBy(10);
- DumpCurrentRec1;
- MoveBy(-5);
- DumpCurrentRec1;
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Test Bookmarks ***');
- First;
- MoveBy(10);
- Memo1.Lines.Add('Goto this record and bookmark it:');
- DumpCurrentRec1;
- BookmarkA := GetBookmark;
- try
- MoveBy(-5);
- Memo1.Lines.Add('Then move to a different record:');
- DumpCurrentRec1;
- BookmarkB := GetBookmark;
- try
- if BookmarkValid(BookmarkA) then begin
- GotoBookmark(BookmarkA);
- Memo1.Lines.Add('Then return to bookmarked record:');
- DumpCurrentRec1;
- end;
-
- Memo1.Lines.Add('Compare two different bookmarks (0=same, 1=different): ' +
- IntToStr(CompareBookmarks(BookmarkA, BookmarkB)));
- Memo1.Lines.Add('Compare two identical bookmarks (0=same, 1=different): ' +
- IntToStr(CompareBookmarks(BookmarkA, BookmarkA)));
- Memo1.Lines.Add('Compare two nil bookmarks (0=same, 1=different): ' +
- IntToStr(CompareBookmarks(nil, nil)));
- finally
- FreeBookmark(BookmarkB);
- end;
- finally
- FreeBookmark(BookmarkA);
- end;
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Test Insert ***');
- Insert;
- try
- with PTestRec(ActiveBuffer)^ do begin
- EmpNo := 444;
- FirstName := 'NewGuy';
- LastName := 'Inserted';
- HireDate := Date;
- DeptNo := '621';
- Salary := 100000;
- end;
- Post;
- except
- Cancel;
- end;
- Last;
- DumpCurrentRec1;
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Test Append ***');
- Append;
- try
- with PTestRec(ActiveBuffer)^ do begin
- EmpNo := 445;
- FirstName := 'NewGuy';
- LastName := 'Appended';
- HireDate := Date;
- DeptNo := '621';
- Salary := 100000;
- end;
- Post;
- except
- Cancel;
- end;
- Last;
- DumpCurrentRec1;
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Test Update ***');
- Last;
- Memo1.Lines.Add('Rec Before Update:');
- DumpCurrentRec1;
- Edit;
- try
- with PTestRec(ActiveBuffer)^ do
- Salary := Salary + 1000;
- Post;
- except
- Cancel;
- end;
- Memo1.Lines.Add('Rec After Update:');
- DumpCurrentRec1;
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Test Delete ***');
- First;
- MoveBy(2);
- Memo1.Lines.Add('Current Record Before Delete:');
- DumpCurrentRec1;
- Delete;
- Memo1.Lines.Add('Current Record After Delete:');
- DumpCurrentRec1;
- MoveBy(-1);
- Memo1.Lines.Add('Current Record Before Delete:');
- DumpCurrentRec1;
- Delete;
- Memo1.Lines.Add('Current Record After Delete:');
- DumpCurrentRec1;
- finally
- Close;
- end;
- *)
- Open;
- try
- Memo1.Lines.Add('Active = ' + IntToStr(Ord(Active)));
- Memo1.Lines.Add('RecordCount = ' + IntToStr(RecordCount));
- Memo1.Lines.Add('RecordSize = ' + IntToStr(RecordSize));
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Test FieldDefs ***');
- Memo1.Lines.Add('Number of Fields: ' + IntToStr(FieldDefs.Count));
- Memo1.Lines.Add('');
- Memo1.Lines.Add('NO NAME DATATYPE SIZE REQ');
- for I := 0 to FieldDefs.Count - 1 do
- with Memo1.Lines, FieldDefs[I] do
- Add(Format('%2d %-10s %-12s %3d %s',
- [FieldNo,
- Name,
- GetEnumName(TypeInfo(TFieldType), Ord(DataType)),
- Size,
- YesNo[Required]]));
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Test Fields ***');
- Memo1.Lines.Add('Number of Fields: ' + IntToStr(FieldCount));
- Memo1.Lines.Add('');
- Memo1.Lines.Add('NO NAME DATATYPE SIZE REQ');
- for I := 0 to FieldCount - 1 do
- with Memo1.Lines, Fields[I] do
- Add(Format('%2d %-10s %-12s %3d %s',
- [FieldNo,
- FieldName,
- GetEnumName(TypeInfo(TFieldType), Ord(DataType)),
- DataSize,
- YesNo[Required]]));
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Read to EOF forwards ***');
- First;
- while not Eof do begin
- DumpCurrentRec2;
- Next;
- end;
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Test modifying field data ***');
- Last;
- Memo1.Lines.Add('Rec Before Update:');
- DumpCurrentRec2;
- Edit;
- FieldByName('Salary').AsFloat := FieldByName('Salary').AsFloat + 1000;
- Post;
- First; { Move the file pointer to prove the data is stored }
- Last;
- Memo1.Lines.Add('Rec After Update:');
- DumpCurrentRec2;
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Test null field data ***');
- Last;
- Memo1.Lines.Add('Rec Before Update------DeptNo is null (0=no, 1=yes): ' +
- IntToStr(Ord(FieldByName('DeptNo').IsNull)));
- DumpCurrentRec2;
-
- Edit;
- SaveDept := FieldByName('DeptNo').AsString;
- FieldByName('DeptNo').Clear;
- Post;
-
- First; { Move the file pointer to prove the data is stored }
- Last;
- Memo1.Lines.Add('Rec After Update-------DeptNo is null (0=no, 1=yes): ' +
- IntToStr(Ord(FieldByName('DeptNo').IsNull)));
- DumpCurrentRec2;
-
- Edit;
- FieldByName('DeptNo').AsString := SaveDept;
- Post;
-
- First; { Move the file pointer to prove the data is stored }
- Last;
- Memo1.Lines.Add('Reset Back to Nonnull--DeptNo is null (0=no, 1=yes): ' +
- IntToStr(Ord(FieldByName('DeptNo').IsNull)));
- DumpCurrentRec2;
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Test InsertRecord ***');
- InsertRecord([200, 'Steve', 'Troxell', Date, '000', 10000]);
- DumpCurrentRec2;
-
- Memo1.Lines.Add('');
- Memo1.Lines.Add('*** Test AppendRecord ***');
- InsertRecord([201, 'Jane', 'Doe', Date, '001', 20000]);
- DumpCurrentRec2;
- finally
- Close;
- end;
- end;
- end;
-
- procedure TForm1.btnTest2Click(Sender: TObject);
- begin
- PageControl1.ActivePage := TabSheet2;
- DataSource1.DataSet.Open;
- end;
-
- procedure TForm1.btnCloseClick(Sender: TObject);
- begin
- Close;
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- PageControl1.ActivePage := TabSheet1;
- end;
-
- procedure TForm1.MyTable1CalcFields(DataSet: TDataSet);
- begin
- MyTable1CalcField.AsInteger := MyTable1EmpNo.AsInteger * 2;
- end;
-
- end.
-